﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using ServicioRFIDMovil.Entidad;
using ServicioRFIDMovil.DataAccess;
using ServicioRFIDMovil.Herramientas;
using System.Data;

namespace ServicioRFIDMovil.Datos
{

    public class UsuarioDA
    {
        #region --- Variables y Constantes ---
        private static readonly ILog log = LogManager.GetLogger(typeof(UsuarioDA));

        // Parametros Entrada
        private const string PARAM_USUARIO = "P_VNOMBRE";
        private const string PARAM_CLAVE = "P_VCLAVE";
        private const string PARAM_CURSOR = "R_RESULTADO";

        private const string PARAM_LISTAUSUARIO = "P_LISTAUSUARIO";
                                                   
        // Parametros Salida
        private const string IIDUSUARIO = "IIDUSUARIO";
        private const string IIDEMPLEADO = "IIDEMPLEADO";
        private const string VNOMBRECOMPLETO = "VNOMBRECOMPLETO";
        #endregion

        #region --- Metodos Propios ---
        public int validarUsuario(Usuario usuario)
        {
            
            if (log.IsDebugEnabled)
            {
                log.Debug("validarUsuario:" + usuario.nomUser);
            }
            int resultado = 0;
            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexTvperu))
            {
                db.NombreProcedimiento = Constantes.PROCEDIMIENTO_RFID_VALIDARUSUARIO;
                db.agregarParametro(PARAM_USUARIO, DbType.String,ParameterDirection.Input, usuario.nomUser);
                db.agregarParametro(PARAM_CLAVE, DbType.String, ParameterDirection.Input, usuario.passUser);
                db.agregarParametro(PARAM_CURSOR, DbType.Int32, ParameterDirection.Output);

                db.ejecutar();

                resultado = Convert.ToInt32(db.obtenerParametro(PARAM_CURSOR).Value);
            }

            return resultado;
        }

        //Listar Usuarios que tengan solicitud con estado "Aprobado";
        public ListaUsuario listarUsuarioSolicitante() 
        {
            ListaUsuario listaUsuario = null;
            DataSet dsBienAlmacen = new DataSet();

            if (log.IsDebugEnabled)
            {
                log.Debug("listarUsuarioSolicitante()");
            }

            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexTvperu))
            {
                db.NombreProcedimiento = Constantes.PROCEDIMIENTO_RFID_OBTENERUSUARIOSSOLICITANTES;
                db.agregarParametro(PARAM_LISTAUSUARIO, DbType.Binary, ParameterDirection.Output, null);

                IDataAdapter dataAdapter = db.obtenerDataAdapter();
                dataAdapter.Fill(dsBienAlmacen);

                listaUsuario = new ListaUsuario();

                foreach (DataRow fila in dsBienAlmacen.Tables[0].Rows)
                {
                    listaUsuario.Add(generarEntidadSolicitante(fila));
                }
            }

            if (log.IsDebugEnabled)
            {
                log.Debug("Retornando " + listaUsuario.Count + " registros");
            }

            return listaUsuario;
        }

     /*   // Listar usuarios que tengan prestamos pendientes a devolver estado "Registrado", "Pendiente";
        public ListaUsuario listarUsuarioSolicitanteDevolucion()
        {
            ListaUsuario listaUsuario = null;
            DataSet dsArchivoSede = new DataSet();

            if (log.IsDebugEnabled)
            {
                log.Debug("listarUsuarioSolicitanteDevolucion()");
            }

            using (Database db = new Database(ConstantesDAO.NombreInterface.ConexTvperu))
            {
                db.NombreProcedimiento = Constantes.PROCEDIMIENTO_RFID_OBTENERUSUARIOSSOLICITANTES;
                db.agregarParametro(PARAM_CURSOR, DbType.Binary, ParameterDirection.Output, null);

                IDataAdapter dataAdapter = db.obtenerDataAdapter();
                dataAdapter.Fill(dsArchivoSede);

                listaUsuario = new ListaUsuario();

                foreach (DataRow fila in dsArchivoSede.Tables[0].Rows)
                {
                    listaUsuario.Add(generarEntidad(fila));
                }
            }

            if (log.IsDebugEnabled)
            {
                log.Debug("Retornando " + listaUsuario.Count + " registros");
            }

            return listaUsuario;
        }*/

        private Usuario generarEntidad(DataRow fila)
        {
            Usuario usuario = new Usuario();
            usuario.idUsuario = Convert.ToInt32(fila[IIDUSUARIO]);
            
            return usuario;
        }

        private Usuario generarEntidadSolicitante(DataRow fila)
        {
            Usuario usuario = new Usuario();
            usuario.idUsuario = Convert.ToInt32(fila[IIDEMPLEADO]);
            usuario.nombre = fila[VNOMBRECOMPLETO].ToString();

            return usuario;
        }

        #endregion
    }
}
